package itsm.isperp.framework.data.domain;

import itsm.isperp.framework.web.request.JqGridFilterRuleOp;

import org.springframework.data.domain.Sort.Direction;

/**
 * 数据请求，包含的查询及排序条件
 * 
 * @author lizx
 * @date 2013-1-24
 * @since V1.0
 */
public interface DataRequest extends PageRequest {

	/**
	 * 获取数据请求的查询过滤器
	 * 
	 * @return 查询过滤器
	 */
	QueryFilter getFilter();

	/**
	 * 获取查询的字段，默认为*
	 * 
	 * @return 查询的字段
	 */
	String getSelectColumnsString();

	/**
	 * 设定查询的列
	 * 
	 * @return 查询列
	 */
	String[] getSelectColumns();

	/**
	 * 设置查询列
	 * 
	 * @param columns
	 *            查询列
	 */
	DataRequest setSelectColumns(String... columns);

	/**
	 * 
	 * @param column
	 * @return
	 */
	DataRequest addSelectColumns(String column);

	DataRequest addSelectColumnsInFirst(String column);

	/**
	 * 设置是否分页查询
	 * 
	 * @param isPageable
	 *            是否分页
	 * @return 是否分页
	 */
	DataRequest isPageable(boolean isPageable);

	/**
	 * 增加过滤规则
	 * 
	 * @param rule
	 *            过滤规则
	 */
	public <RULE extends FilterRule> DataRequest addFilterRule(RULE rule);

	/**
	 * 增加过滤规则
	 * 
	 * @param rule
	 *            过滤规则
	 */
	public DataRequest addFilterRule(String field, JqGridFilterRuleOp option,
			String data);

	/**
	 * 设置排序
	 * 
	 * @param sidx
	 *            排序字段
	 * @param sord
	 *            排序方式/ASC/DESC
	 * @return 数据请求
	 */
	public DataRequest setSort(String sidx, Direction sord);

	/**
	 * 
	 * @param sidx
	 * @return
	 */
	public DataRequest addSidx(String sidx);

	/**
	 * 获取order by排序（包含ORDER BY 关键字），如果不排序返回空字符串
	 * 
	 * @return
	 */
	public String getOrderSql();

	/**
	 * 
	 * @param groupBy
	 * @return
	 */
	public DataRequest setGroupBy(String groupBy);

	/**
	 * 
	 * @return
	 */
	public String getGroupBy();

	/**
	 * 设置需要发挥的行数，此设定有在不分页请求中有效
	 * 
	 * @param rows
	 */
	public void setRows(int rows);

	public void isQueryOne(boolean b);

}
